package com.wgh.product.converter;

import com.wgh.product.dto.CategoryDTO;
import com.wgh.product.entity.shop.Category;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 分类转换器
 * 用于Category实体和CategoryDTO之间的转换
 */
@Component
public class CategoryConverter {

    /**
     * 将Category实体转换为CategoryDTO
     * @param category Category实体
     * @return CategoryDTO
     */
    public CategoryDTO toDTO(Category category) {
        if (category == null) {
            return null;
        }
        
        CategoryDTO categoryDTO = new CategoryDTO();
        categoryDTO.setId(category.getId());
        categoryDTO.setName(category.getName());
        categoryDTO.setParentId(category.getParentId());
        categoryDTO.setLevel(category.getLevel());
        categoryDTO.setSort(category.getSort());
        categoryDTO.setIcon(category.getIcon());
        categoryDTO.setImage(category.getImage());
        categoryDTO.setStatus(category.getStatus());
        categoryDTO.setCreateTime(category.getCreateTime());
        categoryDTO.setUpdateTime(category.getUpdateTime());
        
        // 处理子分类
        if (category.getChildren() != null && !category.getChildren().isEmpty()) {
            List<CategoryDTO> childrenDTO = new ArrayList<>();
            for (Category child : category.getChildren()) {
                childrenDTO.add(toDTO(child));
            }
            categoryDTO.setChildren(childrenDTO);
        }
        
        return categoryDTO;
    }
    
    /**
     * 将CategoryDTO转换为Category实体
     * @param categoryDTO CategoryDTO
     * @return Category实体
     */
    public Category toEntity(CategoryDTO categoryDTO) {
        if (categoryDTO == null) {
            return null;
        }
        
        Category category = new Category();
        category.setId(categoryDTO.getId());
        category.setName(categoryDTO.getName());
        category.setParentId(categoryDTO.getParentId());
        category.setLevel(categoryDTO.getLevel());
        category.setSort(categoryDTO.getSort());
        category.setIcon(categoryDTO.getIcon());
        category.setImage(categoryDTO.getImage());
        category.setStatus(categoryDTO.getStatus());
        
        // 子分类在实体中是运行时属性，不需要在这里设置
        
        return category;
    }
    
    /**
     * 将Category实体列表转换为CategoryDTO列表
     * @param categories Category实体列表
     * @return CategoryDTO列表
     */
    public List<CategoryDTO> toDTOList(List<Category> categories) {
        if (categories == null || categories.isEmpty()) {
            return new ArrayList<>();
        }
        
        List<CategoryDTO> categoryDTOs = new ArrayList<>();
        for (Category category : categories) {
            categoryDTOs.add(toDTO(category));
        }
        
        return categoryDTOs;
    }
    
    /**
     * 将CategoryDTO列表转换为Category实体列表
     * @param categoryDTOs CategoryDTO列表
     * @return Category实体列表
     */
    public List<Category> toEntityList(List<CategoryDTO> categoryDTOs) {
        if (categoryDTOs == null || categoryDTOs.isEmpty()) {
            return new ArrayList<>();
        }
        
        List<Category> categories = new ArrayList<>();
        for (CategoryDTO categoryDTO : categoryDTOs) {
            categories.add(toEntity(categoryDTO));
        }
        
        return categories;
    }
}